springboot JSON格式化配置
Spring boot json序列化的配置先贴配置这段配置配置了Long类型和时间类型的序列化配置
123456789101112131415161718192021/** * 自定义json序列化 */@Beanpublic Jackson2ObjectMapperBuilderCustomizer customizer() { return builder -> builder.simpleDateFormat("yyyy-MM-dd HH:mm:ss") // long类型转string, 前端处理Long类型,数值过大会丢失精度 .serializerByType(Long.class, ToStringSerializer.instance) .serializerByType(Long.TYPE, ToStringSerializer.instance) .s ...
org.redisson.client.redisexception: err unknown command PEXPIRETIME问题处理
org.redisson.client.redisexception: err unknown command PEXPIRETIME问题处理在获取redis中key的过期时间时,发现并没有如期获取到过期时间,程序抛出了如下的异常
123456789101112131415161718192021222324org.redisson.client.RedisException: ERR unknown command 'PEXPIRETIME'. channel: [id: 0x08706bdb, L:/127.0.0.1:64540 - R:127.0.0.1/127.0.0.1:6379] command: (PEXPIRETIME), promise: java.util.concurrent.CompletableFuture@70c7b9a[Not completed, 1 dependents], params: [sys:token:1848366052968607746] at org.redisson.client.handler.CommandD ...
notify死锁代码示例
notify死锁代码示例今天看到一个问题,说使用lock.notify方法有可能会导致死锁问题。
问题是由于notify是随机唤醒一个线程,有可能唤醒的线程是一个错误的线程(指不是期望唤醒的线程),线程仍然无法正常结束。
使用notify唤醒的是所有的线程,可以避免这个问题
代码示例如下1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556public class Main { static Object lock = new Object();// 锁对象 static Boolean flag1 = false;// 条件1 static Boolean flag2 = false;// 条件2 public static void main(String[] args) throws InterruptedException { // 线程1 Thread t ...
SpringCloud学习笔记
SpringCloud1.认识微服务随着互联网行业的发展,对服务的要求也越来越高,服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢?
1.0.学习目标了解微服务架构的优缺点
1.1.单体架构单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
单体架构的优缺点如下:
优点:
架构简单
部署成本低
缺点:
耦合度高(维护困难、升级困难)
1.2.分布式架构分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。
分布式架构的优缺点:
优点:
降低服务耦合
有利于服务升级和拓展
缺点:
服务调用关系错综复杂
分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:
服务拆分的粒度如何界定?
服务之间如何调用?
服务的调用关系如何管理?
人们需要制定一套行之有效的标准来约束分布式架构。
1.3.微服务微服务的架构特征:
单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
自治:团队独立、技术独立、数据独立,独立部署和交付
面向服务:服务提供统一标准的接口,与语言 ...
webpack
webpack
本质上,webpack是一个用于现代 JavaScript 应用程序的 静态模块打包工具。当webpack处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个 bundles,它们均为静态资源,用于展示你的内容。
静态模块:指的是编写代码过程中的,html,css,js,图片等固定内容的文件
为什么要使用webpack开发时,我们会使用框架(React、Vue),ES6模块化语法,Less/sass 等 css 预处理器等语法进行开发。这样的代码要想在浏览器运行必须经过编译成浏览器能识别的JS、Css 等语法,才能运行。所以我们需要打包工具帮我们做完这些事。除此之外,打包工具还能压缩代码、做兼容性处理、提升代码性能等。
使用webpack资源目录123456webpack_code # 项目根目录(所有指令必须在这个目录运行) └── src # 项目源码目录 ├── js # js文件目录 │ ├── count.js ...
node.js
Node.js
Node.js是一个跨平台的JavaScript运行环境,是开发者可以开发服务端的JavaScript应用程序
Node.js为何能执行JS?
浏览器能运行js代码,依靠的是内核中的V8引擎
Node.js是基于Chrome V8引擎进行封装
都支持ECMAScript标准语法,Node.js有独立的API
Node.js没有Dom和Bom对象
node.js的注意事项。不能够使用bom和dom的API。但是可以使用console和定时器的API。
node.js有一个顶级对象:global。再node2020中引入了globalthis,他指向global对象。
buffer
buffer是一个类似于数组的对象,用于表示固定长度的字节序列
本质是一段内存空间,用来处理二进制。
特点
Buffer大小固定且无法调整
Buffer性能较好,直接对计算机内存进行操作
每一个元素的大小为一字节
使用
创建Buffer
123456789101112// 使用Buffer.alloc()函数var buffer = Buffer.alloc(10)console.lo ...
Mybatis是如何进行分页的?
Mybatis是如何进行分页的?逻辑分页
先把所有数据查询到内存中,通过具体的业务逻辑筛选出合适的数据
物理分页
数据库的分页功能,比如mysql的limit,oracle的rownum
mybatis共有三种实现方式直接在mybatis的mapper文件中去写分页的sql这种方式比较灵活,实现简单
通过RowBounds实现逻辑分页
这种方式不适用于数据量较大的场景,有可能会频繁的访问数据库,给数据库增加比较大的压力
一次性加载所有符合查询条件的数据到内存中,根据分页参数的值在内存中实现分页。
在数据量比较大的时候,jdbc会进行优化:不会一次性去把所有的数据查询存储在ResultSet中,而是先加载一部分数据,在根据需求去数据库中滚动加载后续的数据。
通过分页Interceptor拦截器实现
可以提供统一的处理机制,不需要单独的维护分页相关的功能
拦截需要分页的select语句,在select语句中去动态的拼接分页的关键字,从而去实现分页的查询。
常用的pageHelper,mybatis-plus的分页都是基于Interceptor的扩展
实现代码示例
demo地址:tr ...
linux使用docker安装redis
linux使用docker安装redis查看redis镜像版本1docker search redis
拉取最新的redis镜像1docker pull redis
查看拉取的redis镜像1docker images redis
创建redis.conf配置文件12mkdir -p /home/redis/conftouch /home/redis/conf/redis.conf
创建容器并启动123456789docker run \-d \--name redis \-p 6379:6379 \--restart unless-stopped \-v /home/redis/data:/data \-v /home/redis/conf/redis.conf:/etc/redis/redis.conf \redis-server /etc/redis/redis.conf \redis:bullseye
参数含义
–name redis 启动容器的名字
-d 后台运行
-p 6379:6379 将容器的 6379(后面那个) 端口映射到主机的 637 ...
linux使用docker安装mysql-8.0
linux使用docker安装mysql-8.0查询mysql版本1docker search mysql
拉取镜像
本案例使用mysql 8.0.30版本
1docker pull mysql:8.3.0
查看拉取的镜像1docker images mysql:8.3.0
创建挂载目录1mkdir -p /home/mysql/{conf,data,log}
创建配置文件12cd /home/mysql/confvim my.cnf
补充配置内容
123456789101112131415161718192021[client]#设置客户端默认字符集utf8mb4default-character-set=utf8mb4[mysql]#设置服务器默认字符集为utf8mb4default-character-set=utf8mb4[mysqld]#配置服务器的服务号,具备日后需要集群做准备server-id = 1#开启MySQL数据库的二进制日志,用于记录用户对数据库的操作SQL语句,具备日后需要集群做准备log-bin=mysql-bin#设置清 ...
Ajax & Axios
Ajax&Axios什么是ajax技术?
简单点说,就是使用AJAX 是异步的 JavaScript和XML(Asynchronous JavaScript And XML)。XMLHttpRequest 对象与服务器通信。
它可以使用 JSON,XML,HTML 和 text 文本等格式发送和接收数据。
AJAX 最吸引人的就是它的“异步”特性,也就是说它可以在不重新刷新页面的情况下与服务器通信,交换数据,或更新页面。
ajax是浏览器和服务器进行通信的技术
使用axios库
引入axios的库
https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js
使用axios函数
传入配置对象
使用.then接收返回结果
案例12345678910111213141516171819<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title& ...